package com.example.basic.base.enums;

import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

/**
 * 多语言类型
 */
public enum LangTypeEnum implements Serializable {
    EN_US("en_US", "美式英文", false, Locale.US, 3),
    ZH_CN("zh_CN", "简体中文", true, Locale.SIMPLIFIED_CHINESE, 1),
    ZH_TW("zh_TW", "繁体中文", false, Locale.TRADITIONAL_CHINESE, 2);

    // 类型
    private final String type;
    // 描述
    private final String desc;
    // 序号
    private final int index;
    // 描述
    private final Locale locale;
    // 是否是系统全站的默认语言
    private final boolean defaultInd;

    LangTypeEnum(final String type, final String desc, final boolean defaultInd, final Locale locale, final int index) {
        this.type = type;
        this.desc = desc;
        this.defaultInd = defaultInd;
        this.locale = locale;
        this.index = index;
    }

    // 获取语言类型
    public static LangTypeEnum getLangType(String type) {
        LangTypeEnum[] ts = LangTypeEnum.values();
        for (LangTypeEnum t : ts) {
            if (t.getType().equalsIgnoreCase(type)) {
                return t;
            }
        }
        return getDefaultLangType();
    }

    // 获取全站默认语言类型
    public static LangTypeEnum getDefaultLangType() {
        LangTypeEnum[] ts = LangTypeEnum.values();
        for (LangTypeEnum t : ts) {
            if (t.isDefaultInd()) {
                return t;
            }
        }
        return ZH_CN;
    }

    // 获取全站默认语言类型
    public static String getDefaultLang() {
        return getDefaultLangType().getType();
    }

    // 获取可用的语言
    public static List<LangTypeEnum> getAvailableLangType() {
        return Arrays.asList(LangTypeEnum.values());
    }

    // 获取可用的语言
//    public static List<String> getAvailableLangs() {
//        List<String> list = Lists.newArrayList();
//        for (LangTypeEnum t : LangTypeEnum.values()) {
//            list.add(t.getType());
//        }
//        return list;
//    }

    public String getType() {
        return this.type;
    }

    public String getDesc() {
        return this.desc;
    }

    public Locale getLocale() {
        return locale;
    }

    public boolean isDefaultInd() {
        return defaultInd;
    }

    public int getIndex() {
        return index;
    }


}
